package com.jinmdz.fmis.dao.dao;

import com.jinmdz.fmis.dao.dao.provider.SearchProvider;
import com.jinmdz.fmis.dao.model.search.*;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;

import java.util.ArrayList;

/**
 * 殡仪馆业务查询Dao
 *
 * @author GuanKui
 * @date 2020/2/24 15:10
 */
public interface SearchDao {

    /**
     * 火化档案（逝者）信息查询
     *
     * @param data 查询实体
     * @return
     * @author GuanKui
     * @date 2020/2/24  15:11
     */
    @SelectProvider(type = SearchProvider.class, method = "listCremationArchives")
    ArrayList<SearchCremationArchivesViewItem> listCremationArchives(@Param("data") SearchCremationArchivesData data);

    /**
     * 冷藏业务查询
     *
     * @param data 查询实体
     * @return
     * @author GuanKui
     * @date 2020/2/24  15:11
     */
    @SelectProvider(type = SearchProvider.class, method = "listColdStorage")
    ArrayList<SearchColdStorageViewItem> listColdStorage(@Param("data") SearchColdStorageData data);


    /**
     * 礼厅业务查询
     *
     * @param data 查询实体
     * @return
     * @author GuanKui
     * @date 2020/2/24  15:11
     */
    @SelectProvider(type = SearchProvider.class, method = "listMournCeremony")
    ArrayList<SearchMournCeremonyViewItem> listMournCeremony(@Param("data") SearchMournCeremonyData data);

    /**
     * 火化数据查询
     *
     * @param data 查询实体
     * @return
     * @author GuanKui
     * @date 2020/2/24  15:11
     */
    @SelectProvider(type = SearchProvider.class, method = "listCremationData")
    ArrayList<SearchCremationDataViewItem> listCremationData(@Param("data") SearchCremationData data);

    /**
     * 火化台账查询
     *
     * @param data          查询实体
     * @param cremationType 火化类型
     * @return
     * @author GuanKui
     * @date 2020/2/24  15:11
     */
    @SelectProvider(type = SearchProvider.class, method = "listCremationLedger")
    ArrayList<SearchCremationLedgerViewItem> listCremationLedger(@Param("data") SearchCremationLedgerData data, @Param("cremationType") Integer cremationType);

    /**
     * 费用查询
     *
     * @param data             查询实体
     * @param invoiceStateCode 作废发票编码
     * @return
     * @author GuanKui
     * @date 2020/2/24  15:11
     */
    @SelectProvider(type = SearchProvider.class, method = "listChargeQuery")
    ArrayList<SearchChargeViewItem> listChargeQuery(@Param("data") SearchChargeData data, @Param("invoiceStateCode") Integer invoiceStateCode);

    /**
     * 惠民减免统计
     *
     * @param data 查询实体
     * @return
     * @author GuanKui
     * @date 2020/2/24  15:11
     */
    @SelectProvider(type = SearchProvider.class, method = "listHuiMinReduction")
    ArrayList<SearchHuiMinViewItem> listHuiMinReduction(@Param("data") SearchHuiMinData data);

    /**
     * 殡仪馆收入统计
     *
     * @param data             查询实体
     * @param invoiceStateCode 作废发票编码
     * @return
     * @author GuanKui
     * @date 2020/2/24  15:11
     */
    @SelectProvider(type = SearchProvider.class, method = "listRevenueStatistics")
    ArrayList<SearchRevenueStatisticsViewItem> listRevenueStatistics(@Param("data") SearchRevenueStatisticsData data, @Param("invoiceStateCode") Integer invoiceStateCode);

    /**
     * 按照结算主键获取付款方式统计
     *
     * @param chargeSettleIds 结算费用集合
     * @return
     * @author LiCongLu
     * @date 2020-03-07 17:47
     */
    @SelectProvider(type = SearchProvider.class, method = "listRevenueStatisticsPayByChargeSettleIds")
    ArrayList<SearchRevenueStatisticsPayItem> listRevenueStatisticsPayByChargeSettleIds(@Param("chargeSettleIds") ArrayList<Integer> chargeSettleIds);

    /**
     * 操作日志查询
     *
     * @param data 查询实体
     * @return
     * @author LiCongLu
     * @date 2020-04-20 15:32
     */
    @SelectProvider(type = SearchProvider.class, method = "listSystemOperationLog")
    ArrayList<SearchOperationLogViewItem> listSystemOperationLog(@Param("data") SearchOperationLogData data);
}
